import { getCart } from '../../api/api.js';
import { getAddressList } from '../../api/api.js';
import { addOrder } from '../../api/api.js';
import { delGood } from '../../api/api.js';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    cartsData:[],
    allPrice:0,
    address:{},
    // countFlag:false,

  },



  onLoad: function (options){
    let that = this;
  },


  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function(){
    console.log("onshow 方法")
    //初始化数值
    this.setData({
        countFlag:false,
    })
    // 获取openid
    let openid = wx.getStorageSync('loginInfo').openid;
    console.log(openid);
    let options = getCurrentPages()[getCurrentPages().length-1].options;
    let data = JSON.parse(options.data);
    let flag = options.flag;
    console.log("页面传值--------- ",data,flag); 
    this.setData({
       flag,
    })
    

    //打开页面的时候计算价格
    // 计算价格的时候添加一个字段 discountPrice 字段，这个字段是
    // 根据打折信息计算出来的，然后添加回去，
    // 但是可能有些没有打折信息，没有打折信息计算总价的时候就是使用原件
    // 如果有打折就是使用打折后的价格
    this.computedPrice(data);
    // 获取地址
    this.getAddress();
  },


  // 重新就计算总价
  // 选中单个商品的时候要重新计算
  // 选中店铺的时候要重新计算
  // 全选的时候要重新计算
  // 修改数量需要重新计算价格
  computedPrice(data) {
    let that = this;
    console.log("计算价格");
    let cartsData = data;
    console.log(cartsData.length,"cartDatas");
    let allPrice = 0;
    // cartsData 有好多个店铺，每一个店铺都有好多个商品
    // 第一轮循环计算出每一个商品对应的是哪一个折扣，然后把折扣信息放到这个商品里面
    // 第二轮循环根据折扣信息和数量计算出每一个商品的总价格
    // ，底下会显示计算之后的总价。
    cartsData.forEach(item =>{
      let goodsList = item.goodsList;
      goodsList.forEach(goods => {
          // 获取到商品的价格和数量
          let price = goods.goodsPrice;
          let num = goods.goodsAmount;
          // 获取每一个商品的折扣信息
          let countList = goods.goodsBulkSalesObj||[];
          console.log(goods.goodsBulkSalesObj,"商品折扣信息");
          //1 先根据num 找出对应的折扣信息那个item 
          let count = 1;
          
           // 遍历判断是不是有折扣信息
           //如果小于2 的想情况下，没有办法进行for循环
           //这个时候如果只有一个折扣信息的话，还是要继续判断有没有匹配到折扣信息 
            

            //存在折扣信息
            if(countList.length>0){
                console.log("countList > 0")
                let first = countList[0];
                console.log(first);
                // 如果比第一个的minNum 大的话一定是存在折扣信息的
                // 现在就是要判断存在于哪一个折扣区间
                if(num>=first.minNum){
                  console.log("一定存在折扣")
                    
                    goods.countFlag = true;
                    for(let i=1;i<countList.length;i++){
                      if(num<countList[i].minNum&&num>=countList[i-1].minNum){
                         count=countList[i-1].discount;
                      }
                    }
                    // 那么就是没有匹配到区间
                    // 那么就使用最后一个的折扣信息
                    if(count==1){
                      count=countList[countList.length-1].discount;
                    }
                }else{
                    //存着折扣信息，但是数量没有达到折扣的标准。count使用默认值1 不会变
                    // 不需要处理
                    
                }
            }else{
                //没有折扣信息不需要处理，cout 使用默认值1
            }
            
            // cout 类型强制转化昵称number，不一定非得转，转一下更好
            count = Number(count)

            // console.log(count+"--------");


       
          //  一个循环结束只能确认一个折扣信息
          // 如果当前的数量存在于两个区间里面（对应两个折扣信息）那么第一个会被第二个覆盖。
          // 如果一个都没有匹配出来的话，那么折扣使用默认的1，这样乘以折扣的话会是原来的值
          //2 然后根据折扣信息里面的count 来重新计算当前的价格，
          // price*num*count
          // 判断是不是有折扣
          //一个商品的价格 
          let oneGoodPrice = 0;
          if(goods.countFlag == true){
              // 一个商品的总价
              oneGoodPrice = Number(num*price*count*0.1).toFixed(2);
              goods.discountPrice = oneGoodPrice;
              // 有折扣信息的话，那么添加一个标志，然后在总金额那里添加一个标志
              console.log(price,":price",count,":折扣信息")
              console.log("oneGoooood-------",oneGoodPrice);
          }else{
              oneGoodPrice = Number(num*price*count).toFixed(2);
              goods.discountPrice = oneGoodPrice;
              // 有折扣信息的话，那么添加一个标志，然后在总金额那里添加一个标志
              console.log(price,":price",count,":折扣信息")
              console.log("oneGoooood-------",oneGoodPrice);
              
              // 把折扣信息放进商品里面的一个字段
              // goods.discountPrice = false;
              // 如果当前商品没有折扣信息的话
              // 那么使用默认的价格来计算总价
              // 这里是一个商品的多个数量的总价
              // oneGoodPrice = goods.goodsPrice*num;
          }
         
          console.log("获取到onegoodprice"+oneGoodPrice);
          // let goodsPrice = 
          //3 然后price累加，获取到折扣后的总价。
           allPrice = Number(allPrice) + Number(oneGoodPrice);
          // allPrice = Number(allPrice).toFixed(2);
          // console.log(price+"price"+num+"num")
      })


      item.goodsList = goodsList;
    })


    // cartsData 遍历完成。
   
    console.log(allPrice,"allprice---------------=======");
    // 把cartsData 从新放回去，这样就多了一个折扣信息
    // 但是不要回去到cartsdata 之后就直接渲染
    // 要调用计算价格的方法，在计算完价格之后会自动把数据放到 data 里面
    this.setData({
      allPrice,
      cartsData
    })
  },




  // 解析数据与格式
  parseData(data) {
    let storeList = data;
    if (storeList.length < 1) {
      this.setData({
        cartsData: []
      })

      return;
    }
    storeList.forEach(item => {
      //item 是店铺列表的一个item 指代一个店铺
      let list = item.goodsList;
      list.forEach(ite => {
        //重新设置时间的格式
        ite.createDate = ite.createDate.substring(0, 10);
        //处理规格的格式
        let specArray = [];
        let spec = JSON.parse(ite.specName);
        for (let i in spec){
          specArray.push(spec[i]);
        }
        // 把新的数组放回原来的ite 里面
        ite.specName = specArray;
      })

      this.setData({
        cartsData: storeList
      })
      console.log("onshow 方法执行完毕")
    })
  },

  toSelAddress(){
      wx.navigateTo({
        url:'/pages/addressList/addressList',
      })
  },

  // 获取地址
  getAddress(){
      getAddressList().then(res => {
        console.log(res)
        if (res.data.code === 200) {
          // 获取成功
          console.log(res.data.data);
          // 筛选出默认地址
          let addresses= res.data.data;
          let address = addresses.filter(item=>{
               return item.isDefault==true;
          })

          this.setData({
             address:address[0]
          })
          console.log(this.data.address,"地址")
        } else {
          // 获取失败
          wx.showToast({
            title: res.data.errMsg,
            icon:'none'
          })
        }
      })
  },




  // 去支付
  onClickButton(){

    //  判断有没有地址
    if(!this.data.address){
          wx.showToast({
            title: '没有选择地址哦！',
            icon:'none'
          })
         
          return;
    }




      console.log("调用支付接口去支付");
      let orderList = [];
      //创建一个订单
      let cartsData = this.data.cartsData;
      cartsData.forEach(store=>{
          //一个商家是一个订单，所以在这里创建订单 
          console.log("allrpice+++++++"+this.data.allPrice)
          let order = {
            openId:wx.getStorageSync('loginInfo').openid, //微信用户唯一标识
            userName:this.data.address.contact,// 买家名称
            goodsAmount:0,//商品总数量
            paySum:0,//支付金额
            deliveryWay:1,// 配送方式 1快递2自取
            address:'', //地址
            message:'',//买家留言
            details:[],//商品明细
            merchantId:'',//商家id
            store:store.store,//店铺名称
          }
          // 给order 赋值
        let addressData= this.data.address;
        order.address = addressData.province + addressData.city + addressData.address;
        order.addressId = addressData.id; 
        let goodsList = store.goodsList;

          // 定义一个orderCartList
          let orderCartList = [];
          goodsList.forEach(good=>{
            //把每一个good 里面的id 放到一个list里面，然后list放到订单里面。
             orderCartList.push(good.id);
             let detail={
                goodsId:good.goodsId,// 商品id
                specId:good.specId,//规格id
                // specName:good.specName,// 规格名称
                goodsName:good.goodsName,// 商品名称
                price:good.goodsPrice,//商品单价
                goodsNum:good.goodsAmount,//商品购买数量
                totalPrice:good.discountPrice,//商品总金额
                picPath:good.goodsImage//图片地址
             }
             order.goodsAmount+=good.goodsAmount;
              //计算一个订单的总价格 
              /**
               * 1 js浮点数相加会出错，
               *   解决办法是先把浮点数转换成整数相加
               * 2 过程
               *   1）两位小数乘1000
               *   2）相加完之后除1000
               * 
               * 
               * **/ 
              let orderPaySum = Number(order.paySum)*1000 +  Number(good.discountPrice)*1000
              order.paySum = orderPaySum/1000;
              console.log("计算一个订单的总价"+good.discountPrice,order.paySum)


              // 计算totalprice，
              // if(good.discountPrice){
              //     console.log("存在折扣")
              //     // 计算一个商品的总价
              //   //  detail.totalPrice = Number(good.goodsAmount*good.discountPrice).toFixed(2);
              //    detail.totalPrice = Number(good.goodsAmount*good.goodsPrice*good.discountPrice*0.1).toFixed(2);
              //    console.log(good.goodsAmount,"数量")
              //    console.log(good.goodsAmount,"数量")
              //    console.log(good.goodsAmount,"数量")
              // }else{
              //   console.log("不存在折扣")
              //    detail.totalPrice = Number(good.goodsAmount*good.goodsPrice).toFixed(2);
              // }

            //order.paySum += good.goodsPrice;
             order.details.push(detail);
             order.merchantId = good.merchantId;
             
             console.log(detail,"detaill----")
            //  if(good.id){ 
            //    order.orderCartList.push(good.id)
            //  }
          })
         

          // 如果是从购物车过来的需要给order里面添加一个字段
          // orderCartList,有这个字段购买完成后才能删除购物车里面的商品
          if(this.data.flag == "cart"){
            order.orderCartList = orderCartList;
          }
          orderList.push(order);
      })

       let data = {
          orderInfoList:orderList,
       }

      //  发送请求
       addOrder(data).then(res=>{
           console.log(res);
           let data = res.data.data;
           this.wxPay(data);
       })
  },


   wxPay(data){
      /**
       * "timeStamp": "1584673885",
    "nonce_str": "xcoAuYKU4OYJD6G0",
    "appid": "wxae419779fd57bae0",
    "outTradeNo": "1240838324973731840",
    "sign": "7A5713DCD82F35417222999E634BED65",
    "trade_type": "JSAPI",
    "return_msg": "OK",
    "result_code": "SUCCESS",
    "mch_id": "1527207671",
    "return_code": "SUCCESS",
    "prepay_id": "wx20111131969790bf2a4666f81175548500"
       * 
       * 
       * 
       * **/ 
       let param = {
          timeStamp: data.timeStamp,
          nonceStr: data.nonce_str,
          package: `prepay_id=${data.prepay_id}`,
          signType: 'MD5',
          paySign: data.sign,
       }

       console.log(param);


    //  var timeStamp = Date.parse(new Date()).toString();
     // 生成随机字符串
    //  let nonceStr = Math.random().toString(36).substr(2);
    let that = this;
     wx.requestPayment({
       ...param,
       success(res) { 
           console.log(res);
          if (res.errMsg =='requestPayment:ok'){
              // 支付成功
              //删除购物车里面已经付款的商品
             let idList = [];
             let cartsData = that.data.cartsData;
             cartsData.forEach(store=>{
                  
                  let goodsList = store.goodsList;
                  goodsList.forEach(good=>{
                     idList.push(good.id)
                  })
             })

             let data = { 
               openId: wx.getStorageSync('loginInfo').openid,
               idList
             }


             delGood(data).then(res=>{
                  console.log(res);
                  // 跳转到订单页面
                  // wx.navigateTo({
                  //   url:'/pages/orderList/orderList?checked=1',
                  // })
             })
            
               
 

           }



           wx.navigateTo({
            url:'/pages/orderList/orderList?checked='+0,
          })
       },
       fail(res) { 
           console.log(res,"失败")
          //如果子在输入密码的时候点击返回，那么会走失败回调函数
          //
          wx.navigateTo({
            url:'/pages/orderList/orderList?checked='+0,
          })
           
       }
     })
   },


  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }









     //  if(countList.length<2){
          //     //只有一项


          //  }else{
          //     //两项以上
          //     // 判断当前数量折扣还是没有折扣
          //     if(num<countList[0].minNum){
          //         // 没有折扣
          //     }else{
          //         // 一定设置了折扣信息
          //         // 确定折扣区间
          //         // 如果大于两个折扣，并且没有匹配的到一个，
          //         // 那么存在两种情况
          //         // 1 数量不够没有折扣
          //         // 2 数量太大比最后一项的最小值还要大（那么就是无穷大）
          //         // 继续判断是那种情况
                  
          //         for(let n=1;n<countList.length;n++){
          //             if(num<countList[n].minNum&&num>countList[n-1].minNum){
          //                 // 说明存在于n-1项的区间
          //                 count = countList[n-1].discount
          //             }
          //         }

          //         // 如果没有匹配到，那么说明是匹配到了第n项的，并且第n项是无穷大。
          //     }
          //  }
          //  countList.forEach(item=>{
          //      if(num>=item.minNum&&num<=item.maxNum){
          //         //取出来对应的折扣信息
          //          console.log(item.discount,"当前折扣信息打了多少折");
          //          count = item.discount;
          //      }
          //  })
})